Spring Boot এর WebClient হল একটি আধুনিক, নন-ব্লকিং HTTP ক্লায়েন্ট, যা Spring Security এর সাথে ইন্টিগ্রেট করে নিরাপদ HTTP রিকোয়েস্ট প্রেরণ করতে ব্যবহৃত হয়। WebClient ব্যবহার করে আমরা বিভিন্ন ধরনের Authentication এবং Authorization মেকানিজম সহজেই ইমপ্লিমেন্ট করতে পারি।
WebClient এর মাধ্যমে একটি বেসিক অ্যান্থেন্টিকেশন হেডার যুক্ত করা যায়।
import org.springframework.web.reactive.function.client.WebClient;
public class BasicAuthExample {
public static void main(String[] args) {
WebClient webClient = WebClient.builder()
.baseUrl("https://example.com")
.defaultHeaders(headers -> headers.setBasicAuth("username", "password")) // Basic Auth
.build();
String response = webClient.get()
.uri("/secure-endpoint")
.retrieve()
.bodyToMono(String.class)
.block(); // Blocking for simplicity
System.out.println("Response: " + response);
}
}
Bearer Token ব্যবহারের মাধ্যমে API-তে Authorization হেডার যোগ করা হয়।
import org.springframework.web.reactive.function.client.WebClient;
public class BearerTokenExample {
public static void main(String[] args) {
WebClient webClient = WebClient.builder()
.baseUrl("https://example.com")
.defaultHeader("Authorization", "Bearer your-access-token") // Bearer Token
.build();
String response = webClient.get()
.uri("/secure-endpoint")
.retrieve()
.bodyToMono(String.class)
.block(); // Blocking for simplicity
System.out.println("Response: " + response);
}
}
Spring Boot এবং Spring Security ব্যবহার করে WebClient এর মাধ্যমে OAuth2 ব্যবহার করা যায়।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
spring.security.oauth2.client.registration.myclient.client-id=my-client-id
spring.security.oauth2.client.registration.myclient.client-secret=my-client-secret
spring.security.oauth2.client.registration.myclient.authorization-grant-type=client_credentials
spring.security.oauth2.client.provider.myprovider.token-uri=https://example.com/oauth/token
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient(OAuth2AuthorizedClientService authorizedClientService) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2Filter =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(authorizedClientService);
return WebClient.builder()
.apply(oauth2Filter.oauth2Configuration())
.baseUrl("https://example.com")
.build();
}
}
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
@Service
public class SecureService {
private final WebClient webClient;
public SecureService(WebClient webClient) {
this.webClient = webClient;
}
public String fetchSecureData() {
return webClient.get()
.uri("/secure-endpoint")
.retrieve()
.bodyToMono(String.class)
.block(); // Blocking for simplicity
}
}
import org.springframework.web.reactive.function.client.WebClient;
import java.util.HashMap;
import java.util.Map;
public class PostRequestExample {
public static void main(String[] args) {
WebClient webClient = WebClient.builder()
.baseUrl("https://example.com")
.defaultHeader("Authorization", "Bearer your-access-token")
.build();
Map<String, String> payload = new HashMap<>();
payload.put("key1", "value1");
payload.put("key2", "value2");
String response = webClient.post()
.uri("/secure-endpoint")
.bodyValue(payload) // JSON Payload
.retrieve()
.bodyToMono(String.class)
.block();
System.out.println("Response: " + response);
}
}
Spring Security ব্যবহার করে WebClient এর জন্য গ্লোবাল সিকিউরিটি কনফিগারেশন করা যায়।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientManager;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
public WebClient secureWebClient(OAuth2AuthorizedClientManager clientManager) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2Filter =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientManager);
return WebClient.builder()
.apply(oauth2Filter.oauth2Configuration())
.baseUrl("https://example.com")
.build();
}
}
Spring Boot এর WebClient ব্যবহার করে সহজেই নিরাপদ HTTP রিকোয়েস্ট পাঠানো সম্ভব। Basic Authentication, Bearer Token, এবং OAuth2 ইন্টিগ্রেশন Spring Security-এর মাধ্যমে কার্যকরভাবে পরিচালিত হয়। প্রয়োজনে নির্দিষ্ট কোনো কনফিগারেশন বা উদাহরণ নিয়ে আরও আলোচনা করতে পারেন।
Read more